package cn.hanyx.coder.core.concurrent.sync;

/**
 * SynchronizedTest01
 *
 * @author hanyx
 * @date 2020/09/23
 */
public class SynchronizedTest06 implements Runnable {
    static SynchronizedTest06 test06 = new SynchronizedTest06();

    //共享资源
    static int num ;

    @Override
    public void run() {
        for (int i = 0; i < 10000; i++) {
            synchronized (test06) {
                num++;
            }
        }
    }

    /**
     * 分析：当两个线程同时对一个对象的一个方法进行操作，只有一个线程能够抢到锁。
     * 因为一个对象只有一把锁，一个线程获取了该对象的锁之后，其他线程无法获取该对象的锁，
     * 就不能访问该对象的其他synchronized实例方法，但是可以访问非synchronized修饰的方法
     */
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(test06);
        Thread t2 = new Thread(test06);
        t1.start();
        t2.start();
        t1.join();
        t2.join();
        System.out.println(num);
    }
}
